<?xml version="1.0" encoding="UTF-8"?>
<!-- -*- coding: utf-8 -*- -->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<!-- ********************************************************************** -->

<head>
  <!-- meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> -->

  <title>HPCToolkit Home</title>

  <link rel="stylesheet" type="text/css" href="style/style.css" />
</head>

<body>

<!-- ********************************************************************** -->

<!-- HPCToolkit Image (height = 71 pixels) --> <img style="position: absolute; top: 0px; left: 0px" src="style/header.gif" alt="hpctoolkit" /> <div style="position: relative; margin-top: 60px; width: 100%; text-align: right;"> <p style="margin: 0px; font-size: small;">   [ <a href="index.html">Home</a>   | <a href="overview.html">Overview</a>   | <a href="publications.html">Publications</a> ]   &bull;   [ <a href="examples.html">Examples</a> ]   &bull;   [ <a href="software.html">Software/Downloads</a>   | <a href="documentation.html">Documentation/Questions</a> ]   &bull;   [ <a href="info-people.html">People</a> |     <a href="info-acks.html">Acks</a> ] </p> </div> <div style="width: 100%;">   <hr /> </div> 
<!-- <script language="JavaScript" type="text/javascript" src="style/header-hpctoolkit.js"></script> -->

<!-- ********************************************************************** -->

<p>HPCToolkit is an integrated suite of tools for measurement and analysis of program performance on computers ranging from multicore desktop systems to the nation's largest supercomputers.
By using statistical sampling of timers and hardware performance counters, HPCToolkit collects accurate measurements of a program's work, resource consumption, and inefficiency and attributes them to the full calling context in which they occur.
HPCToolkit works with multilingual, fully optimized applications that are statically or dynamically linked.
Since HPCToolkit uses sampling, measurement has low overhead (1-5%) and scales to large parallel systems.
HPCToolkit's presentation tools enable rapid analysis of a program's execution costs, inefficiency, and scaling characteristics both within and across nodes of a parallel system.
HPCToolkit supports measurement and analysis of serial codes, threaded codes (e.g. pthreads, OpenMP), MPI, and hybrid (MPI+threads) parallel codes.
</p>

<p>The figure below illustrates HPCToolkit's primary components and their relationships.
</p>

<div style="float: right; margin-left: 1em;">
  <img width="500" src="fig/hpctoolkit-workflow.png" alt="" />
</div>

<ul>
<li><p><span class="hpctool">hpcrun</span>: 
hpcrun collects accurate and precise calling-context-sensitive performance measurements 
for unmodified fully optimized applications at very low overhead (1-5%). 
It uses asynchronous sampling triggered by system timers and performance 
monitoring unit events to drive collection of call path profiles and optionally traces. 
</p>
</li>

<li><p><span class="hpctool">hpcstruct</span>: 
To associate calling-context-sensitive measurements with source code structure, 
hpcstruct analyzes fully optimized application binaries and recovers information about their 
relationship to source code. 
In particular, hpcstruct relates object code to source code files, procedures, 
loop nests, and identifies inlined code. 
</p>
</li>

<li><p><span class="hpctool">hpcprof</span>: 

hpcprof overlays call path profiles and traces with program structure 
computed by hpcstruct and correlates the result with source code. 
hpcprof/mpi handles thousands of profiles from a parallel execution by 
performing this correlation in parallel. hpcprof and hpcprof/mpi generate a 
performance database that can be explored using the hpcviewer and hpctraceviewer user interfaces. 
</p>
</li>

<li><p><span class="hpctool">hpcviewer</span>: 
hpcviewer is a graphical user interface that interactively presents performance data 
in three complementary code-centric views (top-down, bottom-up, and flat), 
as well as a graphical view that enables one to assess performance variability 
across threads and processes. hpcviewer is designed to facilitate rapid top-down 
analysis using derived metrics that highlight scalability losses and inefficiency rather than focusing exclusively on program hot spots. 
</p>
</li>

<li><p><span class="hpctool">hpctraceviewer</span>: hpctraceviewer is a graphical user interface
that presents a hierarhical, time-centric view of a program execution.  
The tool can rapidly render graphical views of trace lines for thousands of processors for an execution 
tens of minutes long even a laptop.
hpctraceviewer's hierarchical graphical presentation is quite different than that of other tools -
it renders execution traces at multiple levels of abstraction by 
showing activity over time at different call stack depths. 
</p>
</li>

</ul>

<h2>Exascale Computing Project (ECP) </h2>
<a href="https://www.exascaleproject.org"><img src="https://www.exascaleproject.org/wp-content/themes/exascale/images/ecp-logo.png" height="42" align="left"/></a>HPCToolkit is part of the <a href="https://www.exascaleproject.org/">ECP</a> 
which is a collaborative effort of two US Department of Energy (DOE) organizations - the Office of Science (DOE-SC) and the National Nuclear Security Administration (NNSA).
<p>
In this project, the goal is to extend HPCToolkit with improved capabilities for measurement and analysis of computation, data movement, communication, and I/O at extreme scale. Planned enhancements include improved support for lightweight measurement of massive node-level parallelism using hardware counters, measuring OS activity, recording measurement data efficiently, analyzing performance data in parallel, and integrating code-centric, time-centric, data-centric, and resource-centric views for analysis.
</p>
<h2> Highlighted platforms </h2>
<ul>
  <li>Linux-x86_64, Linux-x86, Linux-Power.</li>
  <li>Including: Cray XT/XE/XK, IBM Blue Gene/Q, Blue Gene/P.</li>
</ul>

<h2> License</h2>
<p>HPCToolkit is open-source software released under the 3-clause
<a href="README.License">BSD license</a>.
</p>

<p>[<span class="lastupdated">Page last updated: 2018/02/04</span>]
</p>

<!-- ********************************************************************** -->

<div style="width: 100%; font-size: small;">   <hr />   <p style="margin: 0px; font-size: small;">     &copy;2000-2018 <a href="http://www.rice.edu">Rice University</a>     &bull;     <a href="http://www.cs.rice.edu">Rice Computer Science</a>   </p>   <a href="http://validator.w3.org/check/referer">     <img src="http://www.w3.org/Icons/valid-xhtml10-blue" alt="" height="15" /></a>   <a href="http://jigsaw.w3.org/css-validator/check/referer">     <img src="http://www.w3.org/Icons/valid-css-blue" alt="" height="15" /></a> </div> 
<!-- <script language="JavaScript" type="text/javascript" src="style/footer-hpctoolkit.js"></script> -->

<!-- ********************************************************************** -->

</body>
</html>


<!-- Local Variables: -->
<!-- eval: (add-hook 'write-file-hooks 'time-stamp) -->
<!-- time-stamp-start: "<span class=\"lastupdated\">Page last updated: " -->
<!-- time-stamp-format: "%:y/%02m/%02d" -->
<!-- time-stamp-end: "</span>" -->
<!-- time-stamp-line-limit: 10000 -->
<!-- End: -->
